package com.hoapital.outpbillwork.function.setValue;

import cn.hutool.core.util.ObjectUtil;
import com.hospital.common.core.hl7Model.fields.*;
import com.hospital.common.core.hl7Model.messages.OBR;
import com.hospital.common.core.hl7Model.messages.ORC;
import com.hoapital.outpbillwork.module.entity.ExamItems;
import com.hoapital.outpbillwork.module.entity.ExamMaster;
import com.hoapital.outpbillwork.module.entity.LabTestItems;
import com.hoapital.outpbillwork.module.entity.LabTestMaster;
import com.hospital.common.core.utils.DateUtil;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

/**
 * @author lvyao
 * @description 检验信息给值
 * @date 2021/12/27
 */
public class SetLabHl7Value extends SetCommSegmentsValue {
    public static ORC getORC(String visitNo, String userId, String orderedByDoctor, String orderedByDept,
                             String hosCode, String hosName, String visitDate, String orc1, String orc5) {
        ORC orc = new ORC();
//        orc.setORC_1("NW");
        orc.setORC_1(orc1);
        EI orc_2 = new EI();
        orc_2.setEI_1(visitNo);
        orc_2.setEI_2("");
        orc_2.setEI_3("");
        orc_2.setEI_4("");
        orc.setORC_2(orc_2);
        EI orc_3 = new EI();
        orc_3.setEI_1("");
        orc_3.setEI_2("");
        orc_3.setEI_3("");
        orc_3.setEI_4("");
        orc.setORC_3(orc_3);
        EI orc_4 = new EI();
        orc_4.setEI_1("");
        orc_4.setEI_2("");
        orc_4.setEI_3("");
        orc_4.setEI_4("");
        orc.setORC_4(orc_4);
//        orc.setORC_5("SC");
        orc.setORC_5(orc5);
        orc.setORC_6("");
        TQ orc_7 = new TQ();
        CQ orc_7_1 = new CQ();
        orc_7_1.setCQ_1("");
        orc_7_1.setCQ_2("");
        orc_7.setTQ_1(orc_7_1);
        RI orc_7_2 = new RI();
        orc_7_2.setRI_1("");
        orc_7_2.setRI_2("");
        orc_7.setTQ_2(orc_7_2);
        orc_7.setTQ_3("");
        orc_7.setTQ_4("");
        orc_7.setTQ_5("");
        orc_7.setTQ_6("");
        orc_7.setTQ_7("");
        orc_7.setTQ_8("");
        orc_7.setTQ_9("");
        orc_7.setTQ_10(new OSD());
        orc.setORC_7(orc_7);
        EIP orc_8 = new EIP();
        EI orc_8_1 = new EI();
        orc_8_1.setEI_1("");
        orc_8_1.setEI_2("");
        orc_8_1.setEI_3("");
        orc_8_1.setEI_4("");
        orc_8.setEIP_1(orc_8_1);
        EI orc_8_2 = new EI();
        orc_8_2.setEI_1("");
        orc_8_2.setEI_2("");
        orc_8_2.setEI_3("");
        orc_8_2.setEI_4("");
        orc_8.setEIP_2(orc_8_2);
        orc.setORC_8(orc_8);
        orc.setORC_9("");
        XCN orc_10 = new XCN();
        orc_10.setXCN_1("");
        orc_10.setXCN_2(new FN());
        orc_10.setXCN_3("");
        orc_10.setXCN_4("");
        orc_10.setXCN_5("");
        orc_10.setXCN_6("");
        orc.setORC_10(orc_10);
        XCN orc_11 = new XCN();
        orc_11.setXCN_1("");
        orc_11.setXCN_2(new FN());
        orc_11.setXCN_3("");
        orc_11.setXCN_4("");
        orc_11.setXCN_5("");
        orc_11.setXCN_6("");
        orc.setORC_11(orc_11);
        XCN orc_12 = new XCN();
        orc_12.setXCN_1(userId);
        FN orc_12_2 = new FN();
        orc_12_2.setFN_1(orderedByDoctor);
        orc_12.setXCN_2(orc_12_2);
        orc_12.setXCN_3("");
        orc_12.setXCN_4("");
        orc_12.setXCN_5("");
        orc_12.setXCN_6("");
        orc.setORC_12(orc_12);
        PL orc_13 = new PL();
        orc_13.setPL_1("");
        orc_13.setPL_2("");
        orc_13.setPL_3("");
        HD orc_13_4 = new HD();
        orc_13_4.setHD_1(orderedByDept);
        orc_13_4.setHD_2("");
        orc_13.setPL_4(orc_13_4);
        orc_13.setPL_5("");
        orc_13.setPL_6("");
        orc_13.setPL_7("");
        orc_13.setPL_8("");
        orc_13.setPL_9("");
        orc.setORC_13(orc_13);
        orc.setORC_14(new XTN());
        orc.setORC_15(visitDate);
        orc.setORC_16(new CE());
        orc.setORC_17(new CE());
        CE orc_18 = new CE();
        orc_18.setCE_1("");
        orc_18.setCE_2("");
        orc.setORC_18(orc_18);
        orc.setORC_19(new XCN());
        orc.setORC_20(new CE());
        XON orc_21 = new XON();
        orc_21.setXON_1(hosCode);
        orc_21.setXON_2(hosName);
        orc.setORC_21(orc_21);
        return orc;
    }

    public static OBR getOBR(LabTestMaster labTestMaster, String userId, String orderedByDoctor, String orderedByDept, String orderedByDeptName, LabTestItems labTestItems) {
        OBR obr = new OBR();
        obr.setOBR_1(String.valueOf(labTestItems.getItemNo()));
        EI obr_2 = new EI();
        obr_2.setEI_1(labTestMaster.getTestNo());
        obr.setOBR_2(obr_2);

        CE obr_4 = new CE();
        obr_4.setCE_1("");
        obr_4.setCE_2(labTestMaster.getNotesForSpcm() == null ? "" : labTestMaster.getNotesForSpcm());
        obr_4.setCE_3("");
        obr_4.setCE_4(labTestItems.getSubLabDept() == null ? "" : labTestItems.getSubLabDept());
        obr_4.setCE_5(labTestMaster.getSpecimen());
        obr_4.setCE_6("");
        obr.setOBR_4(obr_4);
        obr.setOBR_5(String.valueOf(labTestMaster.getPriorityIndicator()));
        obr.setOBR_6(DateUtil.format(labTestMaster.getRequestedDateTime(),"yyyyMMddHHmmss"));

        obr.setOBR_13(labTestMaster.getRelevantClinicDiag());

        SPS obr_15 = new SPS();
        CE obr_15_1 = new CE();
        obr_15_1.setCE_1("");
        obr_15_1.setCE_2(labTestMaster.getSpecimen());
        obr_15_1.setCE_3("");
        obr_15_1.setCE_4("");
        obr_15_1.setCE_5("");
        obr_15.setSPS_1(obr_15_1);
        obr_15.setSPS_2(new TX());
        obr_15.setSPS_3(new TX());
        obr_15.setSPS_4(new CE());
        obr_15.setSPS_5(new CE());
        obr.setOBR_15(obr_15);

        obr.setOBR_18("");
        obr.setOBR_19("");
        obr.setOBR_20(labTestMaster.getPerformedBy());
        obr.setOBR_21(labTestMaster.getPerformedByName());
//                obr.setOBR_22(new SimpleDateFormat("yyyyMMddHHmmss").format(labTestMaster.getResultsRptDateTime()==null?"":labTestMaster.getResultsRptDateTime()));

        MOC obr_23 = new MOC();
        MO obr_23_1 = new MO();
        obr_23_1.setMO_1(labTestItems.getPrice().toString());
        obr_23.setMOC_1(obr_23_1);
        CE obr_23_2 = new CE();
        obr_23_2.setCE_1(labTestMaster.getChargeType());
        obr_23_2.setCE_2(ObjectUtil.isNull(labTestItems.getCosts())?"":labTestItems.getCosts().toString());
        obr_23.setMOC_2(obr_23_2);
        obr.setOBR_23(obr_23);

        CE obr_31 = new CE();
        obr_31.setCE_1(labTestItems.getItemCode());
        obr_31.setCE_2(labTestItems.getItemName());
        obr_31.setCE_3("");
        obr_31.setCE_4("");
        obr_31.setCE_5("");
        obr_31.setCE_6("");
        obr.setOBR_31(obr_31);

        CE obr_39 = new CE();
        obr_39.setCE_1("");
        obr_39.setCE_2("");
        obr_39.setCE_3("");
        obr_39.setCE_4("");
        obr_39.setCE_5("");
        obr.setOBR_39(obr_39);
        obr = setOtherObr(obr, userId, orderedByDoctor, orderedByDept, orderedByDeptName);
        return obr;
    }

    public static OBR getExamObr(ExamMaster examMaster, String userId, String orderedByDoctor, String orderedByDept, String orderedByDeptName, List<ExamItems> examItemsList) {
        OBR obr = new OBR();
        obr.setOBR_1("");
        EI obr_2 = new EI();
        obr_2.setEI_1(examMaster.getExamNo());
        obr.setOBR_2(obr_2);

        CE obr_4 = new CE();
        obr_4.setCE_1("");
        obr_4.setCE_2("");
        obr_4.setCE_3("");
        obr_4.setCE_4(examMaster.getExamClass());
        obr_4.setCE_5(examMaster.getExamSubClass());
        obr_4.setCE_6("");
        obr.setOBR_4(obr_4);
        obr.setOBR_5("");
        obr.setOBR_6(new SimpleDateFormat("yyyyMMddHHmmss").format(examMaster.getReqDateTime()));
        obr.setOBR_8(ObjectUtil.isNull(examMaster.getExamDateTime())?"":new SimpleDateFormat("yyyyMMddHHmmss").format(examMaster.getExamDateTime()));
        obr.setOBR_13(examMaster.getClinDiag());
        obr.setOBR_14(ObjectUtil.isNull(examMaster.getSpmRecvedDate())?"":new SimpleDateFormat("yyyyMMddHHmmss").format(examMaster.getSpmRecvedDate()));
        obr.setOBR_15(new SPS());

        obr.setOBR_17(new XTN());
        obr.setOBR_18(examMaster.getReqDept());
        obr.setOBR_19(examMaster.getReqDeptName());
        obr.setOBR_20(examMaster.getPerformedBy());
        obr.setOBR_21(examMaster.getPerformedByName());
        obr.setOBR_22("");
        MOC obr_23 = new MOC();
        MO obr_23_1 = new MO();
        obr_23_1.setMO_1(examMaster.getCharges().toString());
        obr_23.setMOC_1(obr_23_1);
        CE obr_23_2 = new CE();
        obr_23_2.setCE_1(examMaster.getChargeType());
        obr_23_2.setCE_2(ObjectUtil.isNull(examMaster.getCosts())?"":examMaster.getCosts().toString());
        obr_23.setMOC_2(obr_23_2);
        obr.setOBR_23(obr_23);
        obr.setOBR_24("");
        obr.setOBR_25("");
        obr.setOBR_26(new PRL());
        obr.setOBR_27(new TQ());
        obr.setOBR_28(new XCN());
        obr.setOBR_29(new EIP());
        obr.setOBR_30("");
        CE obr_39 = new CE();
        obr_39.setCE_1(examMaster.getPhysSign());
        obr_39.setCE_2(examMaster.getReqMemo());
        obr_39.setCE_3("");
        obr_39.setCE_4("");
        obr_39.setCE_5("");
        obr.setOBR_39(obr_39);
        List<CE> ceList = new ArrayList<>();
        for (ExamItems examItems : examItemsList) {
            CE ce = new CE();
            ce.setCE_1(examItems.getExamItemCode());
            ce.setCE_2(examItems.getExamItem());
            ce.setCE_3("");
            ce.setCE_4("");
            ce.setCE_5(examItems.getCheckDevice());
            ce.setCE_6("");
            ceList.add(ce);
        }
        obr.setOBR_31_1(ceList);

        obr.setOBR_3(new EI());
        obr.setOBR_7("");
        obr.setOBR_9(new CQ());
        XCN obr_10 = new XCN();
        obr_10.setXCN_1("");
        obr_10.setXCN_2(new FN());
        obr_10.setXCN_3("");
        obr_10.setXCN_4("");
        obr_10.setXCN_5("");
        obr_10.setXCN_6("");
        obr_10.setXCN_7("");
        obr.setOBR_10(obr_10);
        obr.setOBR_11("");
        CE obr_12 = new CE();
        obr_12.setCE_1("");
        obr_12.setCE_2("");
        obr_12.setCE_3("");
        obr.setOBR_12(obr_12);
        obr.setOBR_13("");
        obr.setOBR_14("");
        XCN obr_16 = new XCN();
        obr_16.setXCN_1(userId==null?"":userId);
        FN obr_16_2 = new FN();
        obr_16_2.setFN_1(orderedByDoctor);
        obr_16.setXCN_2(obr_16_2);
        obr_16.setXCN_3(userId==null?"":userId);
        obr_16.setXCN_4(orderedByDoctor);
        obr_16.setXCN_5(orderedByDept);
        obr_16.setXCN_6(orderedByDeptName);
        obr.setOBR_16(obr_16);
        obr.setOBR_17(new XTN());

        obr.setOBR_22("");
        obr.setOBR_24("");
        obr.setOBR_25("0");
        obr.setOBR_26(new PRL());
        obr.setOBR_27(new TQ());
        obr.setOBR_28(new XCN());
        obr.setOBR_29(new EIP());
        obr.setOBR_30("");
        NDL obr_32 = new NDL();
        CNN obr_32_1 = new CNN();
        obr_32_1.setCNN_1("");
        obr_32_1.setCNN_2("");
        obr_32.setNDL_1(obr_32_1);
        obr.setOBR_32(obr_32);
        NDL obr_33 = new NDL();
        CNN obr_33_1 = new CNN();
        obr_33_1.setCNN_1("");
        obr_33_1.setCNN_2("");
        obr_33_1.setCNN_3("");
        obr_33_1.setCNN_4("");
        obr_33.setNDL_1(obr_33_1);
        obr_33.setNDL_2("");
        obr_33.setNDL_3("");
        obr.setOBR_33(obr_33);
        NDL obr_34 = new NDL();
        CNN obr_34_1 = new CNN();
        obr_34_1.setCNN_1("");
        obr_34_1.setCNN_2("");
        obr_34_1.setCNN_3("");
        obr_34.setNDL_1(obr_34_1);
        obr.setOBR_34(obr_34);
        obr.setOBR_35(new NDL());
        obr.setOBR_36("");
        obr.setOBR_37("");
        obr.setOBR_38(new CE());

        CE obr_40 = new CE();
        obr_40.setCE_1("");
        obr_40.setCE_2("");
        obr_40.setCE_3("");
        obr_40.setCE_4("");
        obr_40.setCE_5("");
        obr.setOBR_40(obr_40);
        obr.setOBR_41("");
        obr.setOBR_42("");
        obr.setOBR_43(new CE());
        CE obr_44 = new CE();
        obr_44.setCE_1("");
        obr_44.setCE_2("");
        obr_44.setCE_3("");
        obr.setOBR_44(obr_44);
        CE obr_45 = new CE();
        obr_45.setCE_1("");
        obr_45.setCE_2("");
        obr_45.setCE_3("");
        obr.setOBR_45(obr_45);
        CE obr_46 = new CE();
        obr_46.setCE_1("");
        obr_46.setCE_2("");
        obr_46.setCE_3("");
        obr_46.setCE_4("");
        obr_46.setCE_5("");
        obr.setOBR_46(obr_46);
        return obr;
    }

    public static OBR setOtherObr(OBR obr, String userId, String orderedByDoctor, String orderedByDept, String orderedByDeptName) {
        obr.setOBR_3(new EI());
        obr.setOBR_7("");
        obr.setOBR_8("");
        obr.setOBR_9(new CQ());
        XCN obr_10 = new XCN();
        obr_10.setXCN_1("");
        obr_10.setXCN_2(new FN());
        obr_10.setXCN_3("");
        obr_10.setXCN_4("");
        obr_10.setXCN_5("");
        obr_10.setXCN_6("");
        obr_10.setXCN_7("");
        obr.setOBR_10(obr_10);
        obr.setOBR_11("");
        CE obr_12 = new CE();
        obr_12.setCE_1("");
        obr_12.setCE_2("");
        obr_12.setCE_3("");
        obr.setOBR_12(obr_12);
//                obr.setOBR_7(new SimpleDateFormat("yyyyMMddHHmmss").format(labTestMaster.getSpcmSampleDateTime()==null?"":labTestMaster.getSpcmSampleDateTime()));
//                obr.setOBR_8(new SimpleDateFormat("yyyyMMddHHmmss").format(labTestMaster.getSpcmReceivedDateTime()==null?"":labTestMaster.getSpcmReceivedDateTime()));
        obr.setOBR_13("");
//                obr.setOBR_14(new SimpleDateFormat("yyyyMMddHHmmss").format(labTestMaster.getSpcmReceivedDateTime()==null?"":labTestMaster.getSpcmReceivedDateTime()));
        obr.setOBR_14("");
        XCN obr_16 = new XCN();
        obr_16.setXCN_1(userId==null?"":userId);
        FN obr_16_2 = new FN();
        obr_16_2.setFN_1(orderedByDoctor);
        obr_16.setXCN_2(obr_16_2);
        obr_16.setXCN_3(userId==null?"":userId);
        obr_16.setXCN_4(orderedByDoctor);
        obr_16.setXCN_5(orderedByDept);
        obr_16.setXCN_6(orderedByDeptName);
        obr.setOBR_16(obr_16);
        obr.setOBR_17(new XTN());

        obr.setOBR_22("");
        obr.setOBR_24("");
        obr.setOBR_25("0");
        obr.setOBR_26(new PRL());
        obr.setOBR_27(new TQ());
        obr.setOBR_28(new XCN());
        obr.setOBR_29(new EIP());
        obr.setOBR_30("");
        NDL obr_32 = new NDL();
        CNN obr_32_1 = new CNN();
        obr_32_1.setCNN_1("");
        obr_32_1.setCNN_2("");
        obr_32.setNDL_1(obr_32_1);
        obr.setOBR_32(obr_32);
        NDL obr_33 = new NDL();
        CNN obr_33_1 = new CNN();
        obr_33_1.setCNN_1("");
        obr_33_1.setCNN_2("");
        obr_33_1.setCNN_3("");
        obr_33_1.setCNN_4("");
        obr_33.setNDL_1(obr_33_1);
        obr_33.setNDL_2("");
        obr_33.setNDL_3("");
        obr.setOBR_33(obr_33);
        NDL obr_34 = new NDL();
        CNN obr_34_1 = new CNN();
        obr_34_1.setCNN_1("");
        obr_34_1.setCNN_2("");
        obr_34_1.setCNN_3("");
        obr_34.setNDL_1(obr_34_1);
        obr.setOBR_34(obr_34);
        obr.setOBR_35(new NDL());
        obr.setOBR_36("");
        obr.setOBR_37("");
        obr.setOBR_38(new CE());

        CE obr_40 = new CE();
        obr_40.setCE_1("");
        obr_40.setCE_2("");
        obr_40.setCE_3("");
        obr_40.setCE_4("");
        obr_40.setCE_5("");
        obr.setOBR_40(obr_40);
        obr.setOBR_41("");
        obr.setOBR_42("");
        obr.setOBR_43(new CE());
        CE obr_44 = new CE();
        obr_44.setCE_1("");
        obr_44.setCE_2("");
        obr_44.setCE_3("");
        obr.setOBR_44(obr_44);
        CE obr_45 = new CE();
        obr_45.setCE_1("");
        obr_45.setCE_2("");
        obr_45.setCE_3("");
        obr.setOBR_45(obr_45);
        CE obr_46 = new CE();
        obr_46.setCE_1("");
        obr_46.setCE_2("");
        obr_46.setCE_3("");
        obr_46.setCE_4("");
        obr_46.setCE_5("");
        obr.setOBR_46(obr_46);
        return obr;
    }

}
